home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / shareware / wreckage / source / assembly / backup / asm_3d_b.asm < prev    next >
Assembly Source File  |  1999-02-08  |  2KB  |  154 lines

  1. ;    a0     &ox
  2. ;    a1    &oy
  3. ;    a2    &oz
  4. ;    a3    &oapp
  5. ;    a4    &sincache
  6. ;    d0    templong
  7. ;    sincache(0)=cvaz*32767
  8. ;    sincache(1)=svaz*32767
  9. ;    sincache(2)=cvax*32767
  10. ;    sincache(3)=svax*32767
  11. ;    sincache(4)=cvay*32767
  12. ;    sincache(5)=svay*32767
  13.     
  14.     MOVE.l     a5    ,-(a7)    ;push a5
  15.     MOVE.l    d1    ,a5    ;put &qpnt(1) in a5
  16.  
  17. _rot_loop1:
  18.  
  19.     MOVE.b     (a3)+    ,d1    ;oapp
  20.       BEQ     _asm3d_2    ;(oapp=0)=> skip point
  21.  
  22.  
  23. ;Main Code :)
  24. ;--------
  25.  
  26.     MOVE.w    (a4)    ,d6    ;get cos
  27.     MOVE.w    2(a4)    ,d7    ;get sin
  28.  
  29.       MOVE.l     (a0)    ,d1    ;d1=ox(n)
  30.      CLR.w     d1
  31.       SWAP     d1
  32.  
  33.       MOVE.w     d1    ,d2    ;d2=x
  34.       MULS.w     d6    ,d1    ;x*csa
  35.  
  36.       MULS.w     d7    ,d2    ;x*sna
  37.  
  38.  
  39.       MOVE.l     (a1)    ,d3    ;oy(n)
  40.       CLR.w     d3
  41.       SWAP     d3
  42.  
  43.       MOVE.w     d3    ,d4    ;y
  44.  
  45.       MULS.w     d7    ,d3    ;y*sna
  46.       SUB.l     d3    ,d1    ;x*csa-y*sna
  47.  
  48.       MULS.w     d6    ,d4    ;y*csa
  49.       ADD.l     d2    ,d4    ;y*csa+x*sna
  50.  
  51.  
  52.  
  53.     ;d4 holds Y
  54.     ;d1 holds X
  55.  
  56.  
  57. _rot_loop2:
  58. ;      yy=y*cvax-z*svax    
  59. ;      zz=z*cvax+y*svax
  60.  
  61.     MOVE.w    4(a4)    ,d6    ;get cos
  62.     MOVE.w    6(a4)    ,d7    ;get sin
  63.  
  64.       MOVE.l     (a2)    ,d5    ;d2=oz(n)
  65.      CLR.w     d5
  66.       SWAP     d5
  67.  
  68.       MOVE.w     d5    ,d2    ;d2=z
  69.  
  70.       MULS.w     d6    ,d5    ;z*csa
  71.       MULS.w     d7    ,d2    ;z*sna
  72.  
  73.     CLR.w    d4
  74.     SWAP    d4
  75.       MOVE.w     d4    ,d3    ;y is still here
  76.                 ;   <grin>
  77.  
  78.       MULS.w     d6    ,d3    ;y*csa
  79.       SUB.l     d2    ,d3    ;yy=y*csa-z*sna
  80.  
  81.       MULS.w     d7    ,d4    ;y*sna
  82.       ADD.l     d5    ,d4    ;zz=z*csa+y*sna
  83.  
  84. ;    X    D1
  85. ;    Z    D4
  86. ;    Y    D3 (do not trash)
  87. ;        -----------------
  88.  
  89. _rot_loop3:
  90. ;      xx=x*cvay-z*svay
  91. ;      zz=z*cvay+x*svay
  92.  
  93.     MOVE.w    8(a4)    ,d6    ;get cos
  94.     MOVE.w    10(a4)    ,d7    ;get sin
  95.  
  96.     CLR.W    d4
  97.     SWAP    d4
  98.       MOVE.w     d4    ,d2    ;d2=z (yes, it is still here)
  99.       MULS.w     d6    ,d4    ;z*csa
  100.       MULS.w     d7    ,d2    ;z*sna
  101.  
  102.     CLR.w    d1
  103.     SWAP    d1
  104.  
  105.       MOVE.w     d1    ,d5    ;x is still here                ;   (I hope)
  106.       MULS.w     d6    ,d1    ;x*csa
  107.       SUB.l     d2    ,d1    ;xx=x*csa-z*sna
  108.  
  109.       MULS.w     d7    ,d5    ;x*sna
  110.       ADD.l     d4    ,d5    ;zz=z*csa+x*sna
  111.  
  112. ;    X    D1
  113. ;    Y    D3
  114. ;    Z    D5
  115.  
  116. ;  GetReg a0,&oapp(1)
  117. ;  GetReg a1,&ox(1)
  118. ;  GetReg a2,&oz(1)
  119. ;  GetReg a3,&oy(1)
  120. ;  GetReg a4,&qpnt(1)
  121. ;  GetReg d7,points3
  122. ;  IncBin "asm_3d_Al"
  123.  
  124.     
  125. ;    CLR.w    d3
  126. ;    SWAP    d3
  127.     EXT.l    d3
  128.     TST.l     d3
  129.     BLE     _asm3d_2
  130.     
  131.     DIVS.l    d3    ,d1
  132.     ASL.l     #7    ,d1
  133.     DIVS.l    d3    ,d5
  134.     ASL.l    #7    ,d5
  135.     MOVE.w    #2    ,d2
  136.     BRA    _rot_loop_skip
  137.     
  138.         
  139. _asm3d_2:
  140.     CLR.w d2
  141.  
  142. _rot_loop_skip:
  143.     MOVE.l     d1    ,(a5)+    ;sx
  144.      MOVE.l     d5    ,(a5)+        ;sy
  145.       MOVE.w     #1    ,(a5)+        ;app
  146.  
  147.  
  148.  
  149.       SUBQ.l     #1    ,d0    ;n=n-1
  150.       BGE     _rot_loop1
  151.  
  152.     MOVE.l    (a7)+    ,a5    ;POP a5
  153.  
  154.